Learn in 10 minutes

Learn in 10 minutes

Apprendre JavaScript en 10 minutes

JavaScript est un langage de programmation interprété de haut niveau connu pour sa polyvalence et son utilisation généralisée dans le développement web. Ce tutoriel couvre les fonctionnalités modernes de JavaScript (ES6+) pour vous aider à apprendre rapidement le langage.

1. Écrire votre premier programme JavaScript

Commençons par un programme simple. Créez un fichier nommé hello.js et entrez le code suivant :

console.log("Hello, World!");

Enregistrez le fichier et exécutez la commande suivante dans le terminal ou la ligne de commande :

node hello.js

Ou incluez-le dans un fichier HTML :

<script>
  console.log("Hello, World!");
</script>

La sortie sera :

Hello, World!

Ce programme simple démontre la fonctionnalité de base de sortie de JavaScript. La fonction console.log() est utilisée pour afficher des informations texte dans la console.

2. Syntaxe de base

La syntaxe de JavaScript est similaire à d’autres langages de style C. Elle utilise des points-virgules pour terminer les instructions et des accolades {} pour définir des blocs de code.

// Ceci est un commentaire sur une ligne
console.log("Hello, World!");

/*
Ceci est un commentaire
multi-ligne qui s'étend
sur plusieurs lignes.
*/

Règles de syntaxe de base en JavaScript :

  • Points-virgules : Optionnels mais recommandés pour terminer les instructions
  • Commentaires : Les commentaires d’une ligne commencent par //, les multi-lignes par /* */
  • Sensibilité à la casse : JavaScript est sensible à la casse
  • Blocs de code : Définis par des accolades {}

3. Variables et types de données

En JavaScript, les variables sont déclarées en utilisant let, const ou var. Le JavaScript moderne préfère let et const.

Déclaration de variables :

let name = "John"; // Variable mutable
const age = 25;     // Constante immuable
var oldWay = "déprécié"; // Évitez d'utiliser var

Principaux types de données en JavaScript :

  • Number : 42, 3.14, -10
  • String : "hello", 'world', `template`
  • Boolean : true, false
  • Undefined : undefined (variable déclarée mais non assignée)
  • Null : null (absence intentionnelle de valeur)
  • Object : {key: "value"}, [1, 2, 3]
  • Symbol : Symbol("description") (ES6+)
  • BigInt : 1234567890123456789012345678901234567890n (ES2020+)

3.1 Type Number

JavaScript utilise des nombres à virgule flottante 64 bits pour toutes les valeurs numériques.

let integer = 42;
let float = 3.14159;
let scientific = 2.5e3; // 2500
let hex = 0xFF;         // 255
let binary = 0b1010;    // 10
let octal = 0o10;       // 8

3.2 Type String

Les chaînes peuvent être créées avec des guillemets simples, des guillemets doubles ou des littéraux de modèle.

let single = 'Chaîne avec guillemets simples';
let double = "Chaîne avec guillemets doubles";
let template = `Littéral de modèle`;

// Littéraux de modèle avec interpolation
let name = "Alice";
let greeting = `Bonjour, ${name} !`; // "Bonjour, Alice !"

Opérations sur les chaînes :

let text = "Programmation JavaScript";
console.log(text.length);        // Longueur : 21
console.log(text.toUpperCase()); // "PROGRAMMATION JAVASCRIPT"
console.log(text.toLowerCase()); // "programmation javascript"
console.log(text[0]);            // Premier caractère : "P"
console.log(text.slice(0, 10)); // "Programmat"

3.3 Type Boolean

Le type booléen a deux valeurs : true et false.

let isActive = true;
let isComplete = false;

// Opérations booléennes
let result1 = true && false;  // false
let result2 = true || false;  // true
let result3 = !true;          // false

3.4 Undefined et Null

undefined signifie qu’une variable a été déclarée mais qu’aucune valeur ne lui a été assignée. null est une absence intentionnelle de toute valeur.

let unassigned; // undefined
let empty = null;

if (unassigned === undefined) {
  console.log("Variable non définie");
}

if (empty === null) {
  console.log("Valeur nulle");
}

4. Structures de données

4.1 Array

Les tableaux sont des collections ordonnées et mutables de valeurs.

let numbers = [1, 2, 3, 4, 5];
numbers.push(6);        // Ajouter un élément : [1, 2, 3, 4, 5, 6]
numbers.pop();          // Supprimer le dernier : [1, 2, 3, 4, 5]
numbers.unshift(0);     // Ajouter au début : [0, 1, 2, 3, 4, 5]
numbers.shift();        // Supprimer le premier : [1, 2, 3, 4, 5]
numbers[0] = 10;        // Modifier : [10, 2, 3, 4, 5]

Méthodes de tableau :

let fruits = ["pomme", "banane", "orange"];

// Itération
fruits.forEach(fruit => console.log(fruit));

// Transformation
let lengths = fruits.map(fruit => fruit.length); // [5, 6, 6]

// Filtrage
let longFruits = fruits.filter(fruit => fruit.length > 5); // ["banane", "orange"]

// Recherche
let hasApple = fruits.includes("pomme"); // true
let bananaIndex = fruits.indexOf("banane"); // 1

4.2 Object

Les objets sont des collections de paires clé-valeur.

let person = {
  name: "John",
  age: 30,
  city: "New York",
  isStudent: false
};

// Accéder aux propriétés
console.log(person.name);       // "John"
console.log(person["age"]);     // 30

// Ajouter des propriétés
person.country = "USA";
person["occupation"] = "Développeur";

// Supprimer des propriétés
delete person.isStudent;

// Méthodes d'objet
let keys = Object.keys(person);    // ["name", "age", "city", "country", "occupation"]
let values = Object.values(person); // ["John", 30, "New York", "USA", "Développeur"]
let entries = Object.entries(person); // [["name", "John"], ["age", 30], ...]

4.3 Set

Les sets sont des collections de valeurs uniques.

let numbers = new Set([1, 2, 3, 3, 4, 4, 5]);
console.log(numbers); // Set {1, 2, 3, 4, 5}

// Opérations sur les sets
numbers.add(6);       // Ajouter une valeur
numbers.delete(1);    // Supprimer une valeur
numbers.has(2);       // true
numbers.size;         // 5

// Itération
numbers.forEach(num => console.log(num));

4.4 Map

Les maps sont des collections de paires clé-valeur avec n’importe quel type de données comme clé.

let map = new Map();
map.set("name", "Alice");
map.set(1, "numéro un");
map.set(true, "booléen vrai");

console.log(map.get("name"));    // "Alice"
console.log(map.has(1));         // true
console.log(map.size);           // 3

// Itération
for (let [key, value] of map) {
  console.log(`${key}: ${value}`);
}

5. Opérateurs

JavaScript fournit divers opérateurs pour les calculs et les comparaisons.

  • Arithmétique : +, -, *, /, %, ** (exponentiation)
  • Comparaison : ==, ===, !=, !==, >, <, >=, <=
  • Logique : &&, ||, !
  • Affectation : =, +=, -=, *=, /=, %=
  • Ternaire : condition ? expr1 : expr2

5.1 Opérateurs arithmétiques

let a = 10, b = 3;

console.log(a + b);   // 13
console.log(a - b);   // 7
console.log(a * b);   // 30
console.log(a / b);   // 3.333...
console.log(a % b);   // 1
console.log(a ** b);  // 1000

5.2 Opérateurs de comparaison

let x = 5, y = 10;

console.log(x == y);    // false
console.log(x === y);   // false (égalité stricte)
console.log(x != y);    // true
console.log(x !== y);   // true (inégalité stricte)
console.log(x > y);     // false
console.log(x < y);     // true
console.log(x >= y);    // false
console.log(x <= y);    // true

5.3 Opérateurs logiques

let a = true, b = false;

console.log(a && b);   // false
console.log(a || b);   // true
console.log(!a);       // false

6. Contrôle de flux

6.1 Instructions if

let age = 20;

if (age >= 18) {
  console.log("Adulte");
} else if (age >= 13) {
  console.log("Adolescent");
} else {
  console.log("Enfant");
}

6.2 Instruction switch

let day = "Monday";

switch (day) {
  case "Monday":
    console.log("Début de semaine");
    break;
  case "Friday":
    console.log("Presque le week-end");
    break;
  default:
    console.log("Jour normal");
}

6.3 Boucles for

// Boucle for traditionnelle
for (let i = 0; i < 5; i++) {
  console.log(i); // 0, 1, 2, 3, 4
}

// Boucle for...of (tableaux, chaînes)
let fruits = ["pomme", "banane", "orange"];
for (let fruit of fruits) {
  console.log(fruit);
}

// Boucle for...in (propriétés d'objet)
let person = {name: "John", age: 30};
for (let key in person) {
  console.log(`${key}: ${person[key]}`);
}

6.4 Boucles while

// Boucle while
let count = 0;
while (count < 5) {
  console.log(count);
  count++;
}

// Boucle do...while
let i = 0;
do {
  console.log(i);
  i++;
} while (i < 5);

6.5 break et continue

for (let i = 0; i < 10; i++) {
  if (i === 5) {
    break; // Quitter la boucle
  }
  if (i % 2 === 0) {
    continue; // Sauter les nombres pairs
  }
  console.log(i); // 1, 3
}

7. Fonctions

Les fonctions sont des blocs de code réutilisables.

7.1 Déclaration de fonction

function greet(name) {
  return `Bonjour, ${name} !`;
}

console.log(greet("Alice")); // "Bonjour, Alice !"

7.2 Expressions de fonction

const multiply = function(a, b) {
  return a * b;
};

console.log(multiply(4, 5)); // 20

7.3 Fonctions fléchées (ES6+)

const add = (a, b) => a + b;
const square = x => x * x;
const greet = name => `Bonjour, ${name} !`;

console.log(add(2, 3));      // 5
console.log(square(4));      // 16
console.log(greet("Bob"));   // "Bonjour, Bob !"

7.4 Paramètres par défaut

function createUser(name, age = 18, isActive = true) {
  return {name, age, isActive};
}

console.log(createUser("John"));        // {name: "John", age: 18, isActive: true}
console.log(createUser("Alice", 25));  // {name: "Alice", age: 25, isActive: true}

7.5 Paramètres rest

function sum(...numbers) {
  return numbers.reduce((total, num) => total + num, 0);
}

console.log(sum(1, 2, 3, 4)); // 10
console.log(sum(5, 10, 15));  // 30

7.6 Opérateur de décomposition

let numbers = [1, 2, 3];
let moreNumbers = [4, 5, 6];
let allNumbers = [...numbers, ...moreNumbers]; // [1, 2, 3, 4, 5, 6]

let person = {name: "John", age: 30};
let updatedPerson = {...person, city: "New York"}; // {name: "John", age: 30, city: "New York"}

8. Classes et objets (ES6+)

8.1 Déclaration de classe

class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  introduce() {
    return `Je suis ${this.name}, ${this.age} ans`;
  }

  haveBirthday() {
    this.age++;
    return `${this.name} a fêté son anniversaire, maintenant ${this.age} ans`;
  }
}

let person = new Person("John", 25);
console.log(person.introduce());      // "Je suis John, 25 ans"
console.log(person.haveBirthday());   // "John a fêté son anniversaire, maintenant 26 ans"

8.2 Héritage

class Animal {
  constructor(name, species) {
    this.name = name;
    this.species = species;
  }

  makeSound() {
    return `${this.name} fait un bruit`;
  }
}

class Dog extends Animal {
  constructor(name, breed) {
    super(name, "Chien");
    this.breed = breed;
  }

  makeSound() {
    return `${this.name} aboie`;
  }

  fetch() {
    return `${this.name} rapporte la balle`;
  }
}

let dog = new Dog("Buddy", "Golden Retriever");
console.log(dog.makeSound()); // "Buddy aboie"
console.log(dog.fetch());     // "Buddy rapporte la balle"

8.3 Getters et Setters

class Circle {
  constructor(radius) {
    this.radius = radius;
  }

  get diameter() {
    return this.radius * 2;
  }

  set diameter(diameter) {
    this.radius = diameter / 2;
  }

  get area() {
    return Math.PI * this.radius ** 2;
  }
}

let circle = new Circle(5);
console.log(circle.diameter); // 10
console.log(circle.area);     // 78.53981633974483

circle.diameter = 20;
console.log(circle.radius);   // 10

9. JavaScript asynchrone

9.1 Callbacks

function fetchData(callback) {
  setTimeout(() => {
    callback("Données reçues");
  }, 1000);
}

fetchData(data => {
  console.log(data); // "Données reçues" après 1 seconde
});

9.2 Promesses

function fetchData() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve("Données reçues");
      // reject("Erreur survenue");
    }, 1000);
  });
}

fetchData()
  .then(data => console.log(data)) // "Données reçues"
  .catch(error => console.error(error));

9.3 async/await (ES2017+)

async function getData() {
  try {
    let data = await fetchData();
    console.log(data); // "Données reçues"
  } catch (error) {
    console.error(error);
  }
}

getData();

9.4 Fetch API

async function getUser() {
  try {
    let response = await fetch('https://api.example.com/user');
    let user = await response.json();
    console.log(user);
  } catch (error) {
    console.error('Erreur:', error);
  }
}

10. Gestion des erreurs

try {
  let result = 10 / 0;
  if (!isFinite(result)) {
    throw new Error("Division par zéro");
  }
  console.log(result);
} catch (error) {
  console.error("Erreur:", error.message);
} finally {
  console.log("Ceci s'exécute toujours");
}

11. Modules (ES6+)

11.1 Exportation

// math.js
export const PI = 3.14159;

export function add(a, b) {
  return a + b;
}

export default function multiply(a, b) {
  return a * b;
}

11.2 Importation

// main.js
import multiply, { PI, add } from './math.js';

console.log(PI);           // 3.14159
console.log(add(2, 3));    // 5
console.log(multiply(4, 5)); // 20

12. Fonctionnalités modernes de JavaScript

12.1 Déstructuration

// Déstructuration de tableau
let [first, second, third] = [1, 2, 3];
console.log(first, second, third); // 1 2 3

// Déstructuration d'objet
let {name, age} = {name: "John", age: 30, city: "NY"};
console.log(name, age); // John 30

// Déstructuration de paramètres de fonction
function greet({name, age}) {
  return `Bonjour ${name}, vous avez ${age} ans`;
}

12.2 Littéraux de modèle

let name = "Alice";
let age = 25;

// Interpolation basique
let greeting = `Bonjour, ${name} !`;

// Chaînes multi-lignes
let message = `
  Nom: ${name}
  Âge: ${age}
  Statut: ${age >= 18 ? "Adulte" : "Mineur"}
`;

// Évaluation d'expression
let calculation = `2 + 3 = ${2 + 3}`; // "2 + 3 = 5"

12.3 Chaînage optionnel (?.)

let user = {
  profile: {
    name: "John",
    address: {
      city: "New York"
    }
  }
};

console.log(user?.profile?.name);           // "John"
console.log(user?.profile?.age);            // undefined
console.log(user?.profile?.address?.city);  // "New York"
console.log(user?.employment?.company);     // undefined (pas d'erreur)

12.4 Fusion nulle (??)

let name = "";
let age = 0;
let city = null;
let country = undefined;

console.log(name || "Inconnu");    // "Inconnu" (chaîne vide est falsy)
console.log(name ?? "Inconnu");    // "" (seulement null/undefined)

console.log(age || 18);           // 18 (0 est falsy)
console.log(age ?? 18);           // 0 (seulement null/undefined)

console.log(city ?? "Inconnu");   // "Inconnu"
console.log(country ?? "USA");    // "USA"

13. Méthodes utiles des tableaux

let numbers = [1, 2, 3, 4, 5];

// map : transformer chaque élément
let squares = numbers.map(n => n * n); // [1, 4, 9, 16, 25]

// filter : sélectionner des éléments
let evens = numbers.filter(n => n % 2 === 0); // [2, 4]

// reduce : accumuler des valeurs
let sum = numbers.reduce((total, n) => total + n, 0); // 15

// find : trouver le premier élément correspondant
let firstEven = numbers.find(n => n % 2 === 0); // 2

// some : vérifier si un élément correspond
let hasEven = numbers.some(n => n % 2 === 0); // true

// every : vérifier si tous les éléments correspondent
let allPositive = numbers.every(n => n > 0); // true

// sort : trier les éléments
let sorted = numbers.sort((a, b) => b - a); // [5, 4, 3, 2, 1]

14. Date et heure

let now = new Date();
console.log(now.toString());      // Date et heure actuelles
console.log(now.getFullYear());   // Année actuelle
console.log(now.getMonth());      // Mois actuel (0-11)
console.log(now.getDate());       // Jour actuel (1-31)
console.log(now.getHours());      // Heure actuelle (0-23)

// Formatage des dates
console.log(now.toLocaleDateString()); // Chaîne de date localisée
console.log(now.toLocaleTimeString()); // Chaîne de temps localisée
console.log(now.toISOString());        // Chaîne au format ISO

// Création de dates spécifiques
let specificDate = new Date(2025, 0, 1); // 1er janvier 2025
let timestamp = new Date(1640995200000); // À partir d'un timestamp

15. Expressions régulières

let text = "Bonjour, mon email est [email protected] et mon téléphone est 123-456-7890";

// Modèle d'email
let emailPattern = /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g;
let emails = text.match(emailPattern); // ["[email protected]"]

// Modèle de téléphone
let phonePattern = /\d{3}-\d{3}-\d{4}/g;
let phones = text.match(phonePattern); // ["123-456-7890"]

// Méthode test
let isValidEmail = emailPattern.test("[email protected]"); // true

// Méthode replace
let maskedText = text.replace(phonePattern, "XXX-XXX-XXXX");
console.log(maskedText);

JavaScript est un langage puissant et polyvalent qui continue d’évoluer. Ce tutoriel couvre les concepts essentiels pour vous aider à démarrer, mais il y a beaucoup plus à explorer, y compris des sujets avancés comme les générateurs, les proxies et les APIs web.